#include <iostream>

/*
    查找：查找一个字符串或者一个字符，在指定的字符串中出现的下标，如果找不到就返回 -1
    替换：将一个字符串中指定下标范围的部分，替换成新的字符串
*/

int main(int argc, char const *argv[])
{
    using namespace std;

    string str = "c++ is the most popular, most useful programming language in the world";
    int len = str.length();
    cout << "len = " << len << endl;
    // 查找：
    // int find(const string& str, int pos = 0) const; // 查找str 第一次出现的位置，从pos 开始查找
    int i = str.find("u", 5);
    cout << i << endl;

    // int find(const char* s, int pos = 0) const;  // 查找s第一次出现位置，从pos开始查找
    const char *arr = "useful";
    i = str.find(arr, 0);
    cout << i << endl;

    // int find(const char*s, int pos, int n) const; // 从pos 位置查找s的前n 个字符第一次位置
    i = str.find(arr, 0, 1);
    cout << i << endl;

    // int find(const char c, int pos = 0) const; // 从pos 位置开始查找 c 第一次出现的位置
    i = str.find('u', 20);
    cout << i << endl;
    cout << str.assign(80, 'A') << endl;

    // 反向查找
    // int rfind(const char*s, int pos = npos) const; // 查找s最后一次出现位置，从pos 开始查找，就是反向查找从右向左查找
    str = "c++ is the most popular, most useful programming language in the world";

    int a = str.rfind("most", 11);
    cout << a << endl;

    // int rfind(const char*s, int pos, int n) const; // 从pos 从右向左查找s 的前n 个字符
    a = str.rfind("most, most", len, 2);
    cout << a << endl;

    // int rfind(const char c, int pos = npos) const;    // 查找字符c最后一次出现位置
    a = str.rfind('m', 42);
    cout << a << endl;
    cout << str.assign(80, '#') << endl;

    // 替换功能
    str = "c++ is the most popular, most useful programming language in the world";
    // string& replace(int pos, int n, const string& str); // 替换从pos开始的n个字符为字符串 str
    str.replace(1, 3, "才有机会");
    cout << str << endl;

    // string& replace(int pos, int n, const char* s); // 替换从pos 开始的n个字符为字符串s
    str.replace(30, 8, "如果我是DJ，你会爱我吗"); // 注意中文在UTF-8编码下的3个下标为一个正确的汉字
    cout << str << endl;

    return 0;
}
